(PYTHON) Day - 19 Errors and Exceptions

Reference

  • 문제 출처 - HackerRank
  • 파이썬 연습 - Practice - Python

개인적인 생각과 상상으로 작성한 내용들이 포함되어 있습니다
문제를 풀고 Discussion Tab을 참고하며 코드 스타일을 개선하려고 노력하고자 합니다


HackerRank


Erros and Exceptions

기본 개념

에러에는 크게 두 종류가 있다 -> Syntax errors, Exceptions

Syntax Errors


> > > while True print('Hello world')

File "<stdin>", line 1
while True print('Hello world')
^

SyntaxError: invalid syntax

파이썬을 문법을 배우면서 아마 가장 자주 접하게 되는 에러. 표현식에 문법적인 오류가 있으면 에러가 발생하는 지점을 작은 화살표로 표시하며 에러 메세지를 반환한다.
위 예제에서는 print() 함수에서 이전에 :이 빠져있는 것을 감지하고 에러를 반환한다.

Exceptions

execption


> > > 10 \* (1/0)
> > > Traceback (most recent call last):

File "<stdin>", line 1, in <module>

ZeroDivisionError: division by zero

> > > 4 + spam\*3
> > > Traceback (most recent call last):

File "<stdin>", line 1, in <module>

NameError: name 'spam' is not defined

> > > '2' + 2
> > > Traceback (most recent call last):

File "<stdin>", line 1, in <module>

TypeError: Can't convert 'int' object to str implicitly

표현식이 문법적으로 올바르다 해도 실행 중 에러를 발생시킬 수 있다. 이러한 에러들을 Exceptions(예외)라고 한다.
위 예제에서는 ZeroDivisionError, NameError, TypeError 세 종류의 예외를 보여준다.

Handling Exceptions


> > > def this_fails():
> > > ... x = 1/0
> > > ...
> > > try:
> > > ... this_fails()
> > > ... except ZeroDivisionError as err:
> > > ... print('Handling run-time error:', err)
> > > ...
> > > Handling run-time error: division by zero

try-except 문을 통해 예외를 처리할 수 있다.


Exceptions


문제 : a/b의 값을 구하는 문제
입력 : 테스트케이스 수 t; (t 반복)a, b;
출력 : a/b의 값(예외의 경우 에러코드 출력)

3
1 0
2 $
3 1

Error Code: integer division or modulo by zero
Error Code: invalid literal for int() with base 10: ‘$’
3

for t in range(int(input())):
try:
a, b = map(int, input().split())
print(a//b)

except Exception as e:
print(f'Error Code: {e}')

Incorrect Regex


문제 : 문자열 S가 유효한 표현식(regex)인지 확인하는 문제
입력 : 테스트케이스 수 T; (T 반복) 문자열 S;
출력 : 참/거짓으로 출력

2
.+
.
+

True
False

정규표현식을 다루는 re 모듈을 사용하여 문자열을 컴파일해보고 결과에 따라 참/거짓을 출력

import re

for t in range(int(input())):
try:
S = input()
re.compile(S)
print('True')

except re.error:
print('False')